// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file bs_rpc_resp_msg.h
 * This header file contains the declaration of the described types in the IDL file.
 *
 * This file was generated by the tool fastddsgen.
 */

#ifndef _FAST_DDS_GENERATED_BS_RPC_RESP_MSG_H_
#define _FAST_DDS_GENERATED_BS_RPC_RESP_MSG_H_

#include <array>
#include <bitset>
#include <cstdint>
#include <map>
#include <string>
#include <vector>

#include <fastcdr/cdr/fixed_size_string.hpp>
#include <fastcdr/xcdr/external.hpp>
#include <fastcdr/xcdr/optional.hpp>

// -------------------------- Pub Sub Type ------------------------------

#include <fastdds/dds/core/policy/QosPolicies.hpp>
#include <fastdds/dds/topic/TopicDataType.hpp>
#include <fastdds/rtps/common/InstanceHandle.h>
#include <fastdds/rtps/common/SerializedPayload.h>
#include <fastrtps/utils/md5.h>

#include "bs_rpc_resp_msg.h"

#if !defined(GEN_API_VER) || (GEN_API_VER != 2)
#error Generated bs_rpc_resp_msg is not compatible with current installed Fast DDS. Please, regenerate it with fastddsgen.
#endif // GEN_API_VER

// -------------------------- Pub Sub Type ------------------------------

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec(dllexport)
#else
#define eProsima_user_DllExport
#endif // EPROSIMA_USER_DLL_EXPORT
#else
#define eProsima_user_DllExport
#endif // _WIN32

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(BS_RPC_RESP_MSG_SOURCE)
#define BS_RPC_RESP_MSG_DllAPI __declspec(dllexport)
#else
#define BS_RPC_RESP_MSG_DllAPI __declspec(dllimport)
#endif // BS_RPC_RESP_MSG_SOURCE
#else
#define BS_RPC_RESP_MSG_DllAPI
#endif // EPROSIMA_USER_DLL_EXPORT
#else
#define BS_RPC_RESP_MSG_DllAPI
#endif // _WIN32

namespace eprosima {
namespace fastcdr {
class Cdr;
class CdrSizeCalculator;
}
} // namespace eprosima::fastcdr

/*!
 * @brief This class represents the structure BsRpcRespMsg defined by the user in the IDL file.
 * @ingroup bs_rpc_resp_msg
 */
class BsRpcRespMsg : public eprosima::fastdds::dds::TopicDataType {
public:

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object BsRpcRespMsg that will be copied.
     */
    eProsima_user_DllExport BsRpcRespMsg(
        const BsRpcRespMsg &x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object BsRpcRespMsg that will be copied.
     */
    eProsima_user_DllExport BsRpcRespMsg(
        BsRpcRespMsg &&x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object BsRpcRespMsg that will be copied.
     */
    eProsima_user_DllExport BsRpcRespMsg &operator=(
        const BsRpcRespMsg &x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object BsRpcRespMsg that will be copied.
     */
    eProsima_user_DllExport BsRpcRespMsg &operator=(
        BsRpcRespMsg &&x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x BsRpcRespMsg object to compare.
     */
    eProsima_user_DllExport bool operator==(
        const BsRpcRespMsg &x) const;

    /*!
     * @brief Comparison operator.
     * @param x BsRpcRespMsg object to compare.
     */
    eProsima_user_DllExport bool operator!=(
        const BsRpcRespMsg &x) const;

    /*!
     * @brief This function copies the value in member uuid
     * @param _uuid New value to be copied in member uuid
     */
    eProsima_user_DllExport void uuid(
        const std::string &_uuid);

    /*!
     * @brief This function moves the value in member uuid
     * @param _uuid New value to be moved in member uuid
     */
    eProsima_user_DllExport void uuid(
        std::string &&_uuid);

    /*!
     * @brief This function returns a constant reference to member uuid
     * @return Constant reference to member uuid
     */
    eProsima_user_DllExport const std::string &uuid() const;

    /*!
     * @brief This function returns a reference to member uuid
     * @return Reference to member uuid
     */
    eProsima_user_DllExport std::string &uuid();

    /*!
     * @brief This function copies the value in member header
     * @param _header New value to be copied in member header
     */
    eProsima_user_DllExport void header(
        const std::string &_header);

    /*!
     * @brief This function moves the value in member header
     * @param _header New value to be moved in member header
     */
    eProsima_user_DllExport void header(
        std::string &&_header);

    /*!
     * @brief This function returns a constant reference to member header
     * @return Constant reference to member header
     */
    eProsima_user_DllExport const std::string &header() const;

    /*!
     * @brief This function returns a reference to member header
     * @return Reference to member header
     */
    eProsima_user_DllExport std::string &header();

    /*!
     * @brief This function copies the value in member body
     * @param _body New value to be copied in member body
     */
    eProsima_user_DllExport void body(
        const std::string &_body);

    /*!
     * @brief This function moves the value in member body
     * @param _body New value to be moved in member body
     */
    eProsima_user_DllExport void body(
        std::string &&_body);

    /*!
     * @brief This function returns a constant reference to member body
     * @return Constant reference to member body
     */
    eProsima_user_DllExport const std::string &body() const;

    /*!
     * @brief This function returns a reference to member body
     * @return Reference to member body
     */
    eProsima_user_DllExport std::string &body();

private:
    std::string m_uuid;
    std::string m_header;
    std::string m_body;

    // --------------------------------- Pub Sub Type -----------------------------
public:
    typedef BsRpcRespMsg type;

    eProsima_user_DllExport BsRpcRespMsg();

    eProsima_user_DllExport ~BsRpcRespMsg() override;

    eProsima_user_DllExport bool serialize(
        void *data,
        eprosima::fastrtps::rtps::SerializedPayload_t *payload) override {
        return serialize(data, payload, eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
    }

    eProsima_user_DllExport bool serialize(
        void *data,
        eprosima::fastrtps::rtps::SerializedPayload_t *payload,
        eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;

    eProsima_user_DllExport bool deserialize(
        eprosima::fastrtps::rtps::SerializedPayload_t *payload,
        void *data) override;

    eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
        void *data) override {
        return getSerializedSizeProvider(data, eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
    }

    eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
        void *data,
        eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;

    eProsima_user_DllExport bool getKey(
        void *data,
        eprosima::fastrtps::rtps::InstanceHandle_t *ihandle,
        bool force_md5 = false) override;

    eProsima_user_DllExport void *createData() override;

    eProsima_user_DllExport void deleteData(
        void *data) override;

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED
    eProsima_user_DllExport inline bool is_bounded() const override {
        return false;
    }

#endif // TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_PLAIN
    eProsima_user_DllExport inline bool is_plain() const override {
        return false;
    }

    eProsima_user_DllExport inline bool is_plain(
        eprosima::fastdds::dds::DataRepresentationId_t data_representation) const override {
        static_cast<void>(data_representation);
        return false;
    }

#endif // TOPIC_DATA_TYPE_API_HAS_IS_PLAIN

#ifdef TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE
    eProsima_user_DllExport inline bool construct_sample(
        void *memory) const override {
        static_cast<void>(memory);
        return false;
    }

#endif // TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE

    MD5 m_md5;
    unsigned char *m_keyBuffer;
};

#endif // _FAST_DDS_GENERATED_BS_RPC_RESP_MSG_H_
